package com.itjeffrey.autocode.websocket;

import javax.websocket.server.ServerEndpoint;

import org.springframework.stereotype.Component;

/**
 * websocket服务端
 * @From: Jeffrey
 * @Date: 2020/12/16
 */
@ServerEndpoint(value = "/websocket")
@Component
public class WebSocketServer extends BaseSocketServer{
//    //静态变量，用来记录当前在线连接数。应该把它设计成线程安全的。
//    private static int onlineCount = 0;
//    //concurrent包的线程安全Set，用来存放每个客户端对应的MyWebSocket对象。
//    public static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>();
//
//    //与某个客户端的连接会话，需要通过它来给客户端发送数据
//    private Session session;
//
//    /**
//     * 连接建立成功调用的方法*/
//    @OnOpen
//    public void onOpen(Session session) {
//        this.session = session;
//        webSocketSet.add(this); //加入set中
//        addOnlineCount(); //在线数加1
//        try {
//            sendMessage("连接成功");
//        } catch (IOException e) {
//
//        }
//    }
//
//    /**
//     * 连接关闭调用的方法
//     */
//    @OnClose
//    public void onClose() {
//        webSocketSet.remove(this); //从set中删除
//        subOnlineCount(); //在线数减1
//
//    }
//
//    /**
//     * 收到客户端消息后调用的方法
//     *
//     * @param message 客户端发送过来的消息*/
//    @OnMessage
//    public void onMessage(String message, Session session) {
//        //群发消息
//        for (WebSocketServer item : webSocketSet) {
//            try {
//                item.sendMessage(message);
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//    /**
//     *错误处理
//     * @param session
//     * @param error
//     */
//    @OnError
//    public void onError(Session session, Throwable error) {
//        error.printStackTrace();
//    }
//
//    /**
//     * 发送消息
//     * @param message
//     * @throws IOException
//     */
//    public void sendMessage(String message) throws IOException {
//        /**
//        websocket  session发送文本消息有两个方法：getAsyncRemote()和
//       getBasicRemote()  getAsyncRemote()和getBasicRemote()是异步与同步的区别，
//       大部分情况下，推荐使用getAsyncRemote()。*/
//        this.session.getBasicRemote().sendText(message); //同步发送
//    }


//    /**
//     * 群发自定义消息
//     * */
//    public static void sendInfo(String message) throws IOException {
//        for (WebSocketServer item : webSocketSet) {
//            try {
//                item.sendMessage(message);
//            } catch (IOException e) {
//                continue;
//            }
//        }
//    }
//
//    public static synchronized int getOnlineCount() {
//        return onlineCount;
//    }
//
//    public static synchronized void addOnlineCount() {
//        WebSocketServer.onlineCount++;
//    }
//
//    public static synchronized void subOnlineCount() {
//        WebSocketServer.onlineCount--;
//    }
}